js Number类型的最大安全值为什么是1-2^53至2^53-1
前言
最近才发现自己一直混淆了Number.Max_Value和Number.MAX_SAFE_INTEGER,然后经过一段的研究和学习,终于搞懂了。耐心看完这一篇你会了解到IEEE 754标准的浮点数的表示,了解到JS Number对象的最大(小)值,最大(小)安全值都是怎么来的;NAN,正负无穷大,正0,负0在计算机中都是怎么存储的;还有为什么0.1+0.2==0.3 为什么是false
为什么是1-2^53至2^53-1
双精度浮点数 (IEEE 754)
JavaScript的Number类型为双精度IEEE 754 64位浮点类型。我们来看下图
IEEE 754 双精度的格式:(-1)^s*1.M*2^(E-127)
符号位
1 代表负,0代表正
指数位
指数位是IEEE 754的阶码,是用移码表示,移码和补码只有符号位是相反的,所以补码的符号位1代表正数,0代表负数